我对这一切都是新手。我正在使用Docker容器化Laravel项目。我使用Dockerfile作为镜像,使用Docker-compose作为完整环境。在本地,我通过Dockerfile发送.env文件,它正在工作。
所以,我将代码设置到我的Github帐户并安装了Jenkins。当我尝试使用Jenkins管道运行代码时,它返回我无法访问我的数据库(Mysql),并显示此错误。
SQLSTATE[HY 000] [2002]连接拒绝(SQL:select * from information_schema.tables where table_schema = forge and table_name = migrations and table_type = 'BASE TABLE')
在检查jenkins创建的容器后,.env文件不存在。我如何通过管道发送env变量到工作?
我将发送我的Dockerfile、docker-compose.yml和Jenkinsfile。
Dockerfile
FROM php:8.2-apache
ENV COMPOSER_ALLOW_SUPERUSER 1
# Install dependencies
RUN apt-get update && \
apt-get install -y \
libzip-dev \
zip \
curl \
git \
openssl
# Enable mod_rewrite
RUN a2enmod rewrite
# Install PHP extensions
RUN docker-php-ext-install mysqli pdo pdo_mysql zip gd
ENV APACHE_DOCUMENT_ROOT=/var/www/html/public
RUN sed -ri -e 's!/var/www/html!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/sites-available/*.conf
RUN sed -ri -e 's!/var/www/!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/apache2.conf /etc/apache2/conf-available/*.conf
## Set the working directory
WORKDIR /var/www/html
## Copy the application code for HTML folder
COPY . /var/www/html
## Install composer
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
## Install project dependencies
RUN composer install
##
RUN cp .env.example .env && php artisan key:generate
## Set permissions
RUN chown -R www-data:www-data /var/www/html/storage /var/www/html/bootstrap/cache
字符串
docker-compose.dev.yml
version: '3.8' #versão do composer
services:
laravel:
container_name: eventos-dev # nome do container para o docker
image: henriquemg/gcs-laravel:latest # imagem usada
build:
context: . # inicialização
dockerfile: Dockerfile # Usa o Dockerfile (da mesma pasta) como base
ports:
- 8003:80 # da porta 80(DOCKER(DENTRO)) para a porta 8001(EXTERNO(VM))
networks:
- laravel_network_dev
volumes:
- .:/var/www/html # copia do henriquedois(PC) para html(DOCKER)
depends_on:
- mysql #depende do banco pra subir
mysql:
container_name: banco-dev
image: mysql:8.0 # imagem para o banco de dados
environment: # variaveis de ambiente
MYSQL_DATABASE: 'henriquedb10' # nome do banco a ser usado
MYSQL_USER: 'root'
MYSQL_ROOT_PASSWORD: 'xxx' # senha do root
#ports:
# - "3307:3306"
networks:
- laravel_network_dev
healthcheck:
test: ["CMD-SHELL", 'mysql -uroot --database=henriquedb10 --password=xxx --execute="SELECT count(table_name) > 0 FROM information_schema.tables;" --skip-column-names -B']
interval: 10s
timeout: 10s
retries: 4
volumes:
- .docker/dbdata-dev:/var/lib/mysql/
- ./mysql/my.cnf:/etc/mysql/my.cnf
#volumes:
# dbdata:
# driver: local
networks:
laravel_network_dev:
driver: bridge
pipeline {
agent any
stages {
stage('Clone Repository') {
steps {
git branch: 'main', url: 'https://github.com/setmehemg/arq-software-uni.git'
}
}
stage('Build Docker Image') {
steps {
sh 'docker build -t henriquemg/gcs-laravel:latest .'
}
}
stage('Run Dev Environment') {
steps {
sh 'docker compose -f docker-compose.dev.yml -p dev up -d'
}
}
stage('Execute Tests') {
steps {
sh 'docker exec eventos-dev php artisan migrate --force'
sh 'docker exec eventos-dev php artisan db:seed --class=EventosTableSeeder'
sh 'docker exec -t eventos-dev php artisan test'
}
}
stage('Deploy to Docker Hub') {
steps {
script {
sh 'docker login -u xxx -p xxx'
sh 'docker push henriquemg/gcs-laravel:latest'
}
}
}
}
}
的数据
我已经尝试过使用docker-compose.dev.yml来设置环境变量,但是效果不太好:
environment:
- "APP_ENV=development"
- "DB_CONNECTION=mysql"
- "DB_HOST=mysql"
- "DB_PORT=3306"
- "DB_DATABASE=henriquedb10"
- "DB_USERNAME=root"
- "DB_PASSWORD=xxx"
型
并在docker compose命令上设置“--build-arg”,但效果不佳
更新1:我尝试将.env复制到jenkins工作区内的文件夹中,并在Jenkinsfile中使用以下代码,但也返回了一个错误。
stage("Populate .env file") {
steps {
dir("/var/lib/jenkins/workspace/envs/laravel") {
fileOperations([fileCopyOperation(excludes: '', flattenFiles: true, includes: '.env', targetLocation: "${WORKSPACE}")])
}
}
}
型
1条答案
按热度按时间omhiaaxx1#
你可以在整个管道中传递environ,然后用args传递给docker
你也可以在声明式的docker pipeline中隐藏任何文件:
字符串
注意。藏匿将由Jenkins代理帐户执行。请确保该文件具有正确的权限