Декларативный Jenkins + сборка в Docker + публикация с использованием Expo == соединение отклонено - PullRequest
0 голосов
/ 09 января 2019

Работая с простым декларативным конвейером в Jenkins, я сталкиваюсь с несоответствием, когда я могу вручную запускать команды запуска docker для публикации моего проекта expo; однако, когда Дженкинс создает Docker-контейнер и пытается выполнить команду expo publish, я получаю сообщение об ошибке соединения отказано. Моим первоначальным предположением было добавить привилегированный контейнер в Docker, а затем убедиться, что пользователь может работать от имени root ... ничего из этого не помогло. Мне любопытно, если бы кто-нибудь выяснил, как запустить expo CI / CD внутри док-контейнера, используя Дженкинса как основной способ облегчить это.

+ EXPO_DEBUG=true npx expo publish --non-interactive --release-channel develop
[07:50:24] Publishing to channel 'develop'...
[07:50:26] We noticed you did not build a standalone app with this SDK version and release channel before. Remember that OTA updates will not work with the app built with different SDK version and/or release channel. Read more: https://docs.expo.io/versions/latest/guides/publishing.html#limitations
[07:50:27] Building iOS bundle
[07:50:27] connect ECONNREFUSED 127.0.0.1:19001
[07:50:27] Error: connect ECONNREFUSED 127.0.0.1:19001
at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1113:14)

Мой Jenkinsfile довольно прост:

pipeline {
agent {
        dockerfile {
            filename 'Dockerfile'
        }
    }
stages {
    stage('slack notification') {
        agent none
        steps {
            slackSend color: "good", message: "Build Started - ${env.JOB_NAME} ${env.BUILD_NUMBER} (<${env.BUILD_URL}|Open>)"
        }
    }

    stage('run tests') {
        steps {
                sh 'cd /project && yarn test'
            }
    }

    stage ('publish to expo') {
        environment {
            expo_creds = credentials('expo_credentials')
        }
        steps {
            sh "npx expo login -u $expo_creds_USR -p $expo_creds_PSW && mv env.beta.ts env.ts && EXPO_DEBUG=true npx expo publish --non-interactive --release-channel ${env.BRANCH_NAME}"
        }
    }
}

post {
    success {
        slackSend color: "good", message: "Build Finished - ${env.JOB_NAME} ${env.BUILD_NUMBER} (<${env.BUILD_URL}|Open>) duration: ${currentBuild.durationString}"
    }
    unstable {
        slackSend color: "warning", message: "Build Unstable - ${env.JOB_NAME} ${env.BUILD_NUMBER} (<${env.BUILD_URL}|Open>) duration: ${currentBuild.durationString}"
    }
    failure {
        slackSend color: "danger", message: "Build Failed - ${env.JOB_NAME} ${env.BUILD_NUMBER} (<${env.BUILD_URL}|Open>) duration: ${currentBuild.durationString}"
    }
}
}

И мой Dockerfile выглядит следующим образом:

FROM node:10.13-alpine as npm-dependencies
WORKDIR /project
RUN apk add --no-cache \
autoconf \
libtool \
automake \
g++ \
make \
libjpeg-turbo-dev \
libpng-dev \
libwebp-dev \
nasm
COPY yarn.lock .
COPY package.json .
COPY .npmrc .

RUN yarn install

FROM node:10.13-jessie
WORKDIR /project
COPY custom_types ./custom_typess
COPY img ./img
COPY assets ./assets
COPY src ./src
COPY tests ./tests
COPY babel.config.js ./
COPY .buckconfig ./
COPY .flowconfig ./
COPY .watchmanconfig ./
COPY app.json .
COPY App.js .
COPY env.docker.ts ./env.ts
COPY tsconfig.json .
COPY package.json .
COPY jest.config.js .


COPY --from=npm-dependencies /project/node_modules /project/node_modules
RUN npm install -g expo-cli
RUN mkdir /.npm && chmod 0777 /.npm
RUN mkdir /.cache && chmod 0777 /.cache
RUN mkdir /.yarn && chmod 0777 /.yarn
RUN mkdir /.expo && chmod 0777 /.expo
RUN mkdir /project/.expo && chmod 0777 /project/.expo

1 Ответ

0 голосов
/ 09 января 2019

Ладно, так что это действительно только выставка и, вероятно, ошибка в том, как это сделано. После выполнения шага входа в систему я вручную перешел в каталог / project и затем rm -rf .expo.

установка CWD на / project, а затем удаление .expo решает проблему. почему это работает вне Дженкинса, но не внутри, все еще немного сбивает с толку; однако комбинация этих двух действий решила это для меня.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...